﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//void _func()
//{
//	cout << endl;
//}
//
//template<class T,class ... Args>
//void _func(const T& x,Args ... args)
//{
//	cout << x << " ";
//	_func(args...); //传递参数时都能解析出参数
//}
//
//template<class ... Args>
//void func(Args ... args)
//{
//	_func(args...);
//}

//template<class T, class ... Args>
//void _func(const T& x, Args ... args)
//{
//	cout << __FUNCTION__ << endl; //函数名宏
//
//	cout << sizeof...(args) << endl;
//}

//int main()
//{
//	//cout << __FUNCTION__ << endl;
//	//func();
//	//func(1,'2',"3"); // _func(1,('2',"3")) ->  _func('2',"3") -> _func("3") -> _func()
//	//func("sdsas",'s',-1);
//	//_func();
//
//	return 0;
//}

template<class T>
int _Print(T x)
{
	cout << x << " ";
	return 0;
}

template<class ... Args>
void Print(Args ... args)
{
	int arr[] = { 0,_Print(args)... };//arr数组必须至少有一个数 确保无参时不会编译出错
	cout << endl;
}

int main()
{
	Print(); 
	Print(1,2,3);
	//对于arr数组 下面的函数在数组中是 {0,_Print('x'),_Print("xx"),_Print("xxx")} 函数的返回值作为数组初始化的数字 要得到函数返回值就需要调用，于是参数包就展开了
	Print('x',"xx","xxx"); //参数包中参数有几个就调用几次_Print函数

	return 0;
}